package arena.busqueda;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.Dialog;
import org.uqbar.arena.windows.WindowOwner;

import domain.Asiento;
import domain.Usuario;

@SuppressWarnings("serial")
public class BuscadorDeAsientosDialog extends Dialog<BuscadorDeAsientos> {

	
	public BuscadorDeAsientosDialog(WindowOwner owner, Usuario usuario) {
		super(owner, new BuscadorDeAsientos(usuario));
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		mainPanel.setVerticalLayout();
		this.crearPanelDeBusqueda(mainPanel);
		Table<Asiento> tablaResultados = this.crearGrillaDeResultados(mainPanel);
		this.describirTablaResultados(tablaResultados);
		this.crearAcciones(mainPanel);
	}
	

	private void describirTablaResultados(Table<Asiento> tablaResultados) {
		crearColumna(tablaResultados, "Aerolinea", Asiento.AEROLINEA);
		crearColumna(tablaResultados, "Vuelo", Asiento.VUELO);
		crearColumna(tablaResultados, "Asiento", Asiento.ASIENTO);
		crearColumna(tablaResultados, "Precio", Asiento.PRECIO);
	}

	protected void crearAcciones(Panel container) {
		Panel acciones = new Panel(container);
		acciones.setHorizontalLayout();
		
		Button comprar = new Button(acciones);
		comprar.setCaption("Comprar");
		comprar.onClick(new MessageSend(this.getModelObject(), BuscadorDeAsientos.COMPRAR_SELECCIONADO));
		
		Button reservar = new Button(acciones);
		reservar.setCaption("Reservar");
		reservar.onClick(new MessageSend(this.getModelObject(), BuscadorDeAsientos.RESERVAR_SELECCIONADO));
		
		Button cerrar = new Button(acciones);
		cerrar.setCaption("Cerrar");
		cerrar.onClick(new MessageSend(this, "close"));
	}
	

	protected Table<Asiento> crearGrillaDeResultados(Panel container) {
		Table<Asiento> asientos = new Table<Asiento>(container, Asiento.class);
		asientos.bindContentsToProperty(BuscadorDeAsientos.RESULTADOS);
		asientos.bindSelection(BuscadorDeAsientos.ASIENTO_A_OPERAR);
		asientos.setWidth(450);
		asientos.setHeigth(200);
		return asientos;
	}
	
	private void crearColumna(Table<Asiento> table, String tituloColumna, String nombreProperty) {
		Column<Asiento> salidaColumn = new Column<Asiento>(table);
		salidaColumn.setTitle(tituloColumna);
		salidaColumn.setFixedSize(100);
		salidaColumn.bindContentsToProperty(nombreProperty);
	}

	protected void crearPanelDeBusqueda(Panel parent) {
		Panel busqueda = new Panel(parent);
		busqueda.setLayoutInColumns(4);
		
		this.crearLabeledTextBox("Origen:", BuscadorDeAsientos.ORIGEN, busqueda);
		this.crearLabeledTextBox("Destino:", BuscadorDeAsientos.DESTINO, busqueda);
		this.crearLabeledTextBox("Fecha:", BuscadorDeAsientos.FECHA, busqueda);
		
		Button botonBuscar = new Button(busqueda);
		botonBuscar.setCaption("Buscar");
		botonBuscar.onClick(new MessageSend(this.getModelObject(), BuscadorDeAsientos.BUSCAR_ASIENTOS));
	}

	private void crearLabeledTextBox(String label, String property,
			Panel container) {
		Label propertyLabel = new Label(container);
		propertyLabel.setText(label);
		
		TextBox propertyTextBox = new TextBox(container);
		propertyTextBox.bindValueToProperty(property);
	}

}
